package com.zx.designpattern.utils.interfaceforall;

/**
 * Created by zhoux on 2018/2/2.
 * 注释：万能接口管理抽象类
 * 定义了几种增加和调用接口的方式
 * 1、 无参数，无返回值
 * 2、无参数，有返回值
 * 3、有参数，无返回值
 * 4、有参数，有返回值
 * 使用泛型保证参数可以为任意参数，返回值可以为任意返回值。
 */

public abstract class FunctionManagerInterface {
    public abstract FunctionManager addFunctionNoParamNoResult(FunctionNoParamNoResult mFunction);

    public abstract FunctionManager addFunctionWithParamOnly(FunctionWithParamOnly mFunction);

    public abstract FunctionManager addFunctionWithResultOnly(FunctionWithResultOnly mFunction);

    public abstract FunctionManager addFunctionWithParamAndResult(FunctionWithParamAndResult mFunction);

    public abstract void invokeFunctionNoParamNoResult(String functionName);

    public abstract <Param> void invokeFunctionWithParamOnly(String functionName, Param param);

    public abstract <Result> Result invokeFunctionWithResultOnly(String functionName, Class<Result> c);

    public abstract <Result, Param> Result invokeFunctionWithParamAndResult(String functionName, Class<Result> c, Param param);


}
